#!/usr/bin/env python
"""
Django管理命令：将admin用户设置为超级用户
使用方法：python manage.py make_admin_superuser
"""

from django.core.management.base import BaseCommand, CommandError
from django.contrib.auth.models import User
from django.db import transaction


class Command(BaseCommand):
    help = '将admin用户设置为超级用户，如果admin用户不存在则创建'

    def add_arguments(self, parser):
        parser.add_argument(
            '--username',
            type=str,
            default='admin',
            help='指定用户名（默认为admin）'
        )
        parser.add_argument(
            '--email',
            type=str,
            default='admin@example.com',
            help='指定邮箱（默认为admin@example.com）'
        )
        parser.add_argument(
            '--password',
            type=str,
            default='admin123',
            help='指定密码（默认为admin123）'
        )
        parser.add_argument(
            '--force',
            action='store_true',
            help='强制更新已存在的用户权限'
        )

    def handle(self, *args, **options):
        username = options['username']
        email = options['email']
        password = options['password']
        force = options['force']

        try:
            with transaction.atomic():
                # 检查用户是否存在
                try:
                    user = User.objects.get(username=username)
                    user_exists = True
                    self.stdout.write(
                        self.style.WARNING(f'用户 "{username}" 已存在')
                    )
                except User.DoesNotExist:
                    user_exists = False
                    self.stdout.write(
                        self.style.NOTICE(f'用户 "{username}" 不存在，将创建新用户')
                    )

                # 如果用户存在且已经是超级用户，询问是否继续
                if user_exists and user.is_superuser and not force:
                    self.stdout.write(
                        self.style.SUCCESS(f'用户 "{username}" 已经是超级用户')
                    )
                    return

                # 创建或更新用户
                if not user_exists:
                    # 创建新用户
                    user = User.objects.create_user(
                        username=username,
                        email=email,
                        password=password
                    )
                    self.stdout.write(
                        self.style.SUCCESS(f'成功创建用户 "{username}"')
                    )
                else:
                    # 更新现有用户的邮箱（如果提供了新邮箱）
                    if email != 'admin@example.com' or force:
                        user.email = email
                    
                    # 更新密码（如果提供了新密码）
                    if password != 'admin123' or force:
                        user.set_password(password)
                        self.stdout.write(
                            self.style.NOTICE(f'已更新用户 "{username}" 的密码')
                        )

                # 设置超级用户权限
                user.is_superuser = True
                user.is_staff = True
                user.is_active = True
                user.save()

                # 输出结果
                self.stdout.write('\n' + '='*50)
                self.stdout.write(self.style.SUCCESS('✅ 超级用户设置完成！'))
                self.stdout.write('='*50)
                self.stdout.write(f'用户名: {user.username}')
                self.stdout.write(f'邮箱: {user.email}')
                self.stdout.write(f'超级用户权限: {user.is_superuser}')
                self.stdout.write(f'员工权限: {user.is_staff}')
                self.stdout.write(f'账户状态: {"激活" if user.is_active else "未激活"}')
                self.stdout.write(f'创建时间: {user.date_joined}')
                self.stdout.write('='*50)
                
                # 权限说明
                self.stdout.write('\n📋 权限说明:')
                self.stdout.write('• is_superuser = True: 拥有所有权限，可以管理整个系统')
                self.stdout.write('• is_staff = True: 可以访问Django管理后台')
                self.stdout.write('• is_active = True: 账户处于激活状态')
                
                # 访问信息
                self.stdout.write('\n🌐 访问信息:')
                self.stdout.write('• 管理后台地址: http://127.0.0.1:8000/admin/')
                self.stdout.write(f'• 用户名: {user.username}')
                if not user_exists or force:
                    self.stdout.write(f'• 密码: {password}')
                else:
                    self.stdout.write('• 密码: (保持原密码不变)')
                
                self.stdout.write('\n' + self.style.SUCCESS('🎉 admin用户现在拥有完整的管理员权限！'))

        except Exception as e:
            raise CommandError(f'设置超级用户时发生错误: {str(e)}')